V2Ray的白话文教程中有一段是教学如何为自己的节点使用Cloudflare CDN,这种方法建立于Cloudflare支持转发WebSocket和gRPC流量的情况下。其实有很多CDN也支持转发WebSocket流量,比如CloudFront、Gcore等等。
而CloudFront甚至有隐藏的中国节点,如果用于翻墙,那么我们的客户端根本不用处理经过GFW的流量,这部分工作都交给CloudFront了。
由于CloudFront公布的IP地址段中不包含此类节点,我们需要从全部的中国IP中扫描出来才行。
免费付费都好。我用的是 nic.eu.org 的免费域名。
使用Shadowsocks的Go版本和v2ray-plugin,以WebSocket传输,工作在80端口,不要TLS。你需要确保$PATH
中有v2ray
程序以及/usr/bin/go-shadowsocks2
存在。
创建/etc/systemd/system/go-shadowsocks.service
:
[Unit]
Description=Shadowsocks2
Wants=network-online.target
After=network-online.target
[Service]
User=root
ExecStart=/usr/bin/go-shadowsocks2 -s 'ss://AEAD_AES_256_GCM:PASSWORD@:80' -verbose -plugin v2ray -plugin-opts "server"
Nice=-10
KillMode=process
Restart=on-failure
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
PrivateDevices=true
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
请将PASSWORD
替换为你想要的值。
启动服务: systemctl start go-shadowsocks
此时访问 http://源域
应当收到“Bad Request”,这是V2Ray插件的标准回复,说明你的操作没有错误。
进入CloudFront创建分配,填入之前配置的源域,协议选择“仅 HTTP”。
“缓存策略”我选择是“CachingOptimized”;“源请求策略”我选择的是“AllViewer”;允许的 HTTP 方法
我选择的是最多的一项。
为了可以指定IP,我们还需要配置“备用域名”。输入备用域名、请求并在CloudFront应用证书等操作过程我不再描述。
配置完成后,在浏览器访问https://备用域名
也应当收到“Bad Request”,这是经过CloudFront服务器中转回来的结果,这表明我们的CloudFront配置无误。
我使用的工具是gscan_quic,IP段来自IPIP制作中国大陆地区ip列表 每2月更新一次。配置文件 config.user.json
如下:
{
"ScanWorker":1000,
"ScanMode": "SNI",
"SNI": {
"ScanCountPerIP": 1,
"ServerName": ["d1emgxxou2di91.cloudfront.net"],
"VerifyCommonName": "*.cloudfront.net",
"HTTPVerifyHosts": ["d1emgxxou2di91.cloudfront.net"],
"HandshakeTimeout": 800,
"ValidStatusCode": 400,
"ScanMinRTT": 0,
"ScanMaxRTT": 1000,
"OutputSeparator": "\n",
"InputFile": "./iprange_china_ip_list.txt",
"OutputFile": "./out_cloudfront_cn.txt",
"Level": 2
}
}
ScanWorker
是扫描的线程数,如果你用这个值扫描时速度非常快,那么它其实根本没有逐个扫描,你该考虑降低这个值,到最大的合适位置为止。ServerName
是连接时使用的SNI值,建议将其替换为你的CloudFront域名。VerifyCommonName
是验证证书上的CommonName。HTTPVerifyHosts
是发起HTTP请求时使用的Host
。ValidStatusCode
时验证HTTP回复时要确认的状态码。Level
使用1时仅确认TCP连通性、2是除了1的验证之外还要验证证书的CommonName、3是除了1和2的验证之外还要验证对HTTP请求的回复的状态码。我放在VPS上扫描,速度为 1000 IP/s ,中国IP总共有354835264个,用时大概98.56小时。
有一些IP向其443端口发起HTTPS请求时返回的CommomName为*.iot.irobot.cn
,这样的IP建议排除,因为根据本人经验,这样的用一段时间之后其443端口就不能对其正常发起TLS请求,过一段时间会恢复。这种情况在一些博文中被称为“断流”。目前并不清楚原因为何,但是有一些可能性:
在gscan_quic里扫描时ServerName
设为8964.iot.irobot.cn
、VerifyCommonName
设为*.iot.irobot.cn
,扫描后在vim中:sort
结果,将其和同样sort过的之前的结果用diff
命令比较,即可得出不返回该CommonName的IP地址。
我使用的工具是CloudflareSpeedTest。
在ip.txt
填入我们上面处理好的IP,然后执行命令: ./CloudflareST -t 1 -url 测速地址
关于测速地址,请观看“参考资料”中bulianglin.com
发布的视频。
优选后的IP输出在result.csv
文件。
去你的DNS管理界面将备用域名指向刚才优选过的IP即可,可以多指定几个。
我使用的是Clash,节点示例配置如下:
- name: example
type: ss
server: 备用域名
servername: 备用域名
port: 443
cipher: aes-256-gcm
password: PASSWORD
udp: true
plugin: v2ray-plugin
mode: websocket
tls: true
host: 备用域名
path: "/"
mux: true
请自行替换各值。
This work is licensed under CC BY-SA 4.0